这段代码是Haru Free PDF Library中关于PDF图形状态（Graphic State）的头文件 `hpdf_gstate.h`。它定义了PDF图形状态相关的数据结构和函数原型。以下是对代码的详细解释：

1. **版权声明**：注释块提供了Haru PDF库的版权信息。

2. **宏定义**：`#ifndef _HPDF_GSTATE_H` 和 `#define _HPDF_GSTATE_H` 用于防止头文件被多次包含。

3. **包含其他头文件**：`#include "hpdf_font.h"` 包含了处理PDF字体所需的头文件。

4. **C++兼容性**：条件编译指令，确保当使用C++编译器时，这些函数以C的方式进行链接。

5. **图形状态记录结构体定义**：`_HPDF_GState_Rec` 结构体定义了PDF图形状态的属性，包括变换矩阵、线条宽度、线条端点样式、线条连接样式、剪切模式、字符间距、文字间距、水平缩放、文本行距、渲染模式、文本提升、填充和描边颜色空间、RGB颜色、CMYK颜色、灰度值、字体、字体大小、书写模式、前一个图形状态、深度。

6. **图形状态类型定义**：`HPDF_GState` 是指向 `_HPDF_GState_Rec` 结构体的指针。

7. **图形状态操作函数原型**：
   - `HPDF_GState_New`：创建一个新的PDF图形状态对象。
   - `HPDF_GState_Free`：释放PDF图形状态对象资源。

8. **结束C++兼容性条件编译**：`#ifdef __cplusplus` 和 `#endif /* __cplusplus */` 结束C++兼容性代码块。

9. **结束宏定义**：`#endif /* _HPDF_GSTATE_H */` 结束头文件的宏定义。

这个头文件提供了在PDF文档中管理图形状态的功能，图形状态包括了渲染PDF内容时的各种参数，如变换、颜色、字体等。通过这些函数，开发者可以创建和释放图形状态对象，管理PDF内容的渲染。/*
 * << Haru Free PDF Library >> -- hpdf_gstate.h
 *
 * URL: http://libharu.org
 *
 * Copyright (c) 1999-2006 Takeshi Kanno <takeshi_kanno@est.hi-ho.ne.jp>
 * Copyright (c) 2007-2009 Antony Dovgal <tony@daylessday.org>
 *
 * Permission to use, copy, modify, distribute and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appear in all copies and
 * that both that copyright notice and this permission notice appear
 * in supporting documentation.
 * It is provided "as is" without express or implied warranty.
 *
 */

#ifndef _HPDF_GSTATE_H
#define _HPDF_GSTATE_H

#include "hpdf_font.h"

#ifdef __cplusplus
extern "C" {
#endif


/*----------------------------------------------------------------------------*/
/*------ graphic state stack -------------------------------------------------*/

typedef struct _HPDF_GState_Rec  *HPDF_GState;

typedef struct _HPDF_GState_Rec {
    HPDF_TransMatrix        trans_matrix;
    HPDF_REAL               line_width;
    HPDF_LineCap            line_cap;
    HPDF_LineJoin           line_join;
    HPDF_REAL               miter_limit;
    HPDF_DashMode           dash_mode;
    HPDF_REAL               flatness;

    HPDF_REAL               char_space;
    HPDF_REAL               word_space;
    HPDF_REAL               h_scalling;
    HPDF_REAL               text_leading;
    HPDF_TextRenderingMode  rendering_mode;
    HPDF_REAL               text_rise;

    HPDF_ColorSpace         cs_fill;
    HPDF_ColorSpace         cs_stroke;
    HPDF_RGBColor           rgb_fill;
    HPDF_RGBColor           rgb_stroke;
    HPDF_CMYKColor          cmyk_fill;
    HPDF_CMYKColor          cmyk_stroke;
    HPDF_REAL               gray_fill;
    HPDF_REAL               gray_stroke;

    HPDF_Font               font;
    HPDF_REAL               font_size;
    HPDF_WritingMode        writing_mode;

    HPDF_GState             prev;
    HPDF_UINT               depth;
} HPDF_GState_Rec;

/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/

HPDF_GState
HPDF_GState_New  (HPDF_MMgr    mmgr,
                  HPDF_GState  current);


HPDF_GState
HPDF_GState_Free  (HPDF_MMgr    mmgr,
                   HPDF_GState  gstate);

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* _HPDF_GSTATE_H */

